package main

import "fmt"

//把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素
//例如，数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转，该数组的最小值为1。
//示例 1
//输入：[3,4,5,1,2]
//输出：1
//示例 2：
//输入：[2,2,2,0,1]
//输出：0

//func minArray(numbers []int) int {
//	res := numbers[0]
//	for i := len(numbers) - 1; i > 0; i-- {
//		if numbers[i-1] > numbers[i] {
//			res = numbers[i]
//		}
//	}
//	return res
//}
func minArray(numbers []int) int {

	low := 0
	high := len(numbers) - 1
	mid := (high-low)/2 + low //防止溢出
	for high > low {

		if numbers[high] > numbers[mid] {
			high = mid
		} else if numbers[high] < numbers[mid] {
			low = mid+1
		} else {
			high--
		}
		mid = (high-low)/2 + low
	}
	return numbers[high]
}

func main() {
	arr := []int{3,4,5,6,1,2,}
	fmt.Println(minArray(arr))
}

